// 后端 API 的基础 URL
const API_BASE_URL = 'http://localhost:8080/api'; // 根据你的后端地址修改

/**
 * 封装的 AJAX 函数，自动处理 token 和错误
 * @param {object} options - jQuery AJAX 的配置对象
 */
function request(options) {
    // 准备请求头
    const headers = options.headers || {};
    headers['Content-Type'] = 'application/json';
    const token = localStorage.getItem('jwt_token');
    if (token) {
        headers['Authorization'] = 'Bearer ' + token;
    }

    options.data=JSON.stringify(options.data);

    // 发送请求
    $.ajax({
        ...options,
        url: API_BASE_URL + options.url,
        headers: headers,
        dataType: 'json',
        success: function(response) {
            // 可以在这里统一处理成功的响应码
            if (options.success) {
                options.success(response);
            }
        },
        error: function(jqXHR) {
            // 统一处理错误
            // 例如，如果收到 401 Unauthorized，则强制用户登出
            if (jqXHR.status === 401) {
                alert('登录已过期，请重新登录！');
                localStorage.removeItem('jwt_token');
                window.location.href = 'login.html';
                return;
            }
            // 将错误传递给调用者处理
            if (options.error) {
                options.error(jqXHR);
            }
        }
    });
}

/**
 * 从 URL 获取查询参数
 * @param {string} name - 参数名
 * @returns {string|null} - 参数值
 */
function getQueryParam(name) {
    const urlParams = new URLSearchParams(window.location.search);
    return urlParams.get(name);
}

/**
 * 检查用户登录状态并更新界面
 */
function checkLoginStatus() {
    const token = localStorage.getItem('jwt_token');
    const userInfo = localStorage.getItem('user_info');
    
    if (token && userInfo) {
        try {
          console.log(token)
          console.log(userInfo)
            const user = JSON.parse(userInfo);
            $('#user-nickname').text(user.nickname || '用户');
            $('#login-link').hide();
            $('#register-link').hide();
            $('#logout-link').show();
        } catch (e) {
            console.error('解析用户信息失败:', e);
            localStorage.removeItem('user_info');
            localStorage.removeItem('jwt_token');
        }
    } else {
        $('#user-nickname').text('游客');
        $('#login-link').show();
        $('#register-link').show();
        $('#logout-link').hide();
    }
}

/**
 * 退出登录
 */
function logout() {
    localStorage.removeItem('jwt_token');
    localStorage.removeItem('user_info');
    window.location.href = 'login.html';
}

/**
 * 格式化日期时间
 * @param {string|Date} date - 日期字符串或Date对象
 * @returns {string} 格式化后的日期时间
 */
function formatDateTime(date) {
    const d = new Date(date);
    const year = d.getFullYear();
    const month = String(d.getMonth() + 1).padStart(2, '0');
    const day = String(d.getDate()).padStart(2, '0');
    const hours = String(d.getHours()).padStart(2, '0');
    const minutes = String(d.getMinutes()).padStart(2, '0');
    
    return `${year}-${month}-${day} ${hours}:${minutes}`;
}

/**
 * 显示错误消息
 * @param {string} message - 错误消息
 * @param {string} elementId - 错误消息容器的ID
 */
function showError(message, elementId = 'error-message') {
    const $error = $('#' + elementId);
    $error.text(message).show();
    setTimeout(() => {
        $error.hide();
    }, 5000);
}

/**
 * 验证邮箱格式
 * @param {string} email - 邮箱地址
 * @returns {boolean} 是否有效
 */
function isValidEmail(email) {
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return emailRegex.test(email);
}

/**
 * 验证用户名格式（字母数字下划线，3-20字符）
 * @param {string} username - 用户名
 * @returns {boolean} 是否有效
 */
function isValidUsername(username) {
    const usernameRegex = /^[a-zA-Z0-9_]{3,20}$/;
    return usernameRegex.test(username);
}

// 页面加载时检查登录状态
$(document).ready(function() {
    checkLoginStatus();
    
    // 绑定退出登录事件
    $('#logout-link').on('click', function(e) {
        e.preventDefault();
        logout();
    });
});
